package com.hsnn.medstgmini.sys.service.impl;

import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.hsnn.medstgmini.sys.dao.SysPrivilegeDao;
import com.hsnn.medstgmini.sys.model.SysPrivilege;
import com.hsnn.medstgmini.sys.model.SysRole;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.sys.service.SysPrivilegeManager;
import com.hsnn.medstgmini.util.TreeUtil;

/**
 * @category 权限
 * @author CCL
 */
@Service
public class SysPrivilegeManagerImpl implements SysPrivilegeManager {

	@Autowired
	private SysPrivilegeDao privilegeDao;

	/**
	 * @category 查询权限列表
	 * @return
	 */
	public List<SysPrivilege> getPrivilegeList(String roleId) {
		List<SysPrivilege> list = privilegeDao.getPrivilegeList(roleId);
		return TreeUtil.toPrivilegeTree(list);
	}

	/**
	 * @category 保存权限
	 * @param privilege
	 * @return
	 */
	@Transactional
	public SysPrivilege savePrivilege(SysPrivilege privilege) {
		return privilegeDao.savePrivilege(privilege);
	}

	/**
	 * @category 删除权限
	 * @param privilege
	 */
	@Transactional
	public void deletePrivilege(SysPrivilege privilege) {
		privilegeDao.deletePrivilege(privilege);
	}

	/**
	 * @category 查询用户权限列表
	 * @return
	 */
	public List<SysPrivilege> getPrivilegeListByUser(SysUser sysUser) {
		return privilegeDao.getPrivilegeListByUser(sysUser);
	}

	/**
	 * @category 医疗机构、企业查询子角色权限列表
	 * @date 2015年6月16日
	 * @param role当前登陆人角色
	 * @param roleId当前编辑的子角色的id
	 * @return
	 */
	public List<SysPrivilege> getPrivilegeListByRole(SysRole role, String roleId) {
		List<SysPrivilege> list = privilegeDao.getPrivilegeListByRole(role,
				roleId);
		return TreeUtil.toPrivilegeTree(list);
	}

	/**
	 * @category 查询当前登陆用户所属角色的权限（排除新增编辑用户页面所选角色的权限）
	 * @date 2015年6月19日
	 * @param user当前登陆用户
	 * @param roleId新增编辑用户页面所选角色id
	 * @return
	 */
	public List<SysPrivilege> getExtraPrivilegeList(SysUser user,
			String userId, String roleId) {
		List<SysPrivilege> list = privilegeDao.getExtraPrivilegeList(user,
				userId, roleId);
		return TreeUtil.toPrivilegeTree(list);
	}

	/**
	 * @category 查询主用户权限集合
	 * @date 2015年10月20日
	 * @param user
	 * @param userId
	 * @return
	 */
	public List<Map<String, Object>> getMainUserPrivilege(String userId,
			String roleId) {
		List<Map<String, Object>> list = privilegeDao.getMainUserPrivilege(
				userId, roleId);
		return TreeUtil.toPrivTree(list);
	}

	/**
	 * @category 保存用户权限
	 * @date 2015年10月21日
	 * @param userId
	 * @param adds
	 * @param dels
	 */
	@Transactional
	public void saveUserPrivilege(String userId, String adds, String dels,Date updTime,String updUser) {
		privilegeDao.saveUserPrivilege(userId, adds, dels,updTime,updUser);
	}

	/**
	 * @category 查询主用户权限集合
	 * @date 2015年10月20日
	 * @param user
	 * @param userId
	 * @return
	 */
	public List<Map<String, Object>> getSubUserPrivilege(String userId) {
		List<Map<String, Object>> list = privilegeDao
				.getSubUserPrivilege(userId);
		return TreeUtil.toPrivTree(list);
	}

	/**
	 * @category 查询主角色权限集合
	 * @date 2015年10月20日
	 * @param roleId
	 * @return
	 */
	public List<Map<String, Object>> getMainRolePrivilege(String roleId) {
		List<Map<String, Object>> list = privilegeDao
				.getMainRolePrivilege(roleId);
		return TreeUtil.toPrivTree(list);
	}

	/**
	 * @category 查询子角色权限集合
	 * @date 2015年10月20日
	 * @param roleId
	 * @return
	 */
	public List<Map<String, Object>> getSubRolePrivilege(String roleId,String zhuUserId) {
		List<Map<String, Object>> list = privilegeDao
				.getSubRolePrivilege(roleId,zhuUserId);
		return TreeUtil.toPrivTree(list);
	}

	/**
	 * @category 保存角色权限
	 * @date 2015年10月22日
	 * @param roleId
	 * @param adds
	 * @param dels
	 */
	@Transactional
	public void saveRolePrivilege(String roleId, String adds, String dels, Date updTime,String updUser) {
		privilegeDao.saveRolePrivilege(roleId, adds, dels,updTime,updUser);
	}

	/**
	 * @category 查询子角色权限集合（只读）
	 * @date 2015年10月20日
	 * @param roleId
	 * @return
	 */
	public List<Map<String, Object>> getSubRolePrivilegeAsRead(String roleId) {
		List<Map<String, Object>> list = privilegeDao
				.getSubRolePrivilegeAsRead(roleId);
		return TreeUtil.toPrivTree(list);
	}
	
	/**
	 * @category 查询主角色权限集合
	 * @date 2015年10月20日
	 * @param roleId
	 * @return
	 */
	public List<Map<String, Object>> getMainRolePrivilegeTemp(String roleId) {
		List<Map<String, Object>> list = privilegeDao
				.getMainRolePrivilegeTemp(roleId);
		return TreeUtil.toPrivTree(list);
	}

}
